/**
 * 
 */
package com.css.common.core.utils;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;

/**
 *
 * @project 金税三期电子税务局项目
 * @package com.css.common.core.utils
 * @file LionTypeUtils.java 创建时间:2019年5月29日下午7:38:45
 * @title 标题（要求能简洁地表达出类的功能和职责）
 * @description 描述（简要描述类的职责、实现方式、使用注意事项等）
 * @copyright Copyright (c) 2019 中国软件与技术服务股份有限公司
 * @company 中国软件与技术服务股份有限公司
 * @module 模块: 模块名称
 * @author   商健
 * @reviewer 审核人
 * @version 1.0
 * @history 修订历史（历次修订内容、修订人、修订时间等）
 *
 */
public class LionTypeUtils {

    public static Map<String, Object> beanToMap(Object bean) {
        if (bean != null) {
            Map<String, Object> map = null;
            try {
                map = new HashMap<>(BeanUtils.describe(bean));
            } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
                e.printStackTrace();
            }
            return map;
        }
        return null;
    }

    public static List<Map<String, Object>> beanToMap(List<?> list) {
        if (list == null) {
            return null;
        }
        final List<Map<String, Object>> mapList = new ArrayList<>(list.size());
        for (int i = 0; i < list.size(); i++) {
            mapList.add(beanToMap(list.get(i)));
        }
        return mapList;
    }

    public static <T> T mapToBean(Map<String, Object> map, Class<T> clazz) {
        T bean = null;
        try {
            bean = clazz.newInstance();
            BeanUtils.populate(bean, map);
        } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
        return bean;
    }

    public static <T> List<T> mapToBean(List<Map<String, Object>> mapList, Class<T> clazz) {
        if (mapList == null) {
            return null;
        }
        final List<T> beanList = new ArrayList<>(mapList.size());
        for (int i = 0; i < mapList.size(); i++) {
            beanList.add(mapToBean(mapList.get(i), clazz));
        }
        return beanList;
    }

}
